package com.heima.media.interceptor;

import com.heima.common.dto.User;
import com.heima.common.util.UserThreadLocalUtil;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UserInterceptor implements HandlerInterceptor {
    @Override       //进入到controller 方法之前会先进入到此方法
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //拦截 从请求头中获取到 name 和id
        String userId = request.getHeader("userId");//参数为在网关中(fiter中) 传递的名字
        String name = request.getHeader("name");//参数为在网关中(fiter中) 传递的名字
        //有用户id\的情况下 把id 设置到本地线程中
        if (userId!=null){
            User user = new User();
            user.setUserId(Integer.parseInt(userId));
            user.setName(name);
            UserThreadLocalUtil.set(user);

        }
        return true;//直接放行
        //return false;  //拦截  表示不会进入到controller 方法内

    }

    @Override //完成controller 方法之后会先进入到此方法
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    UserThreadLocalUtil.remove();
    //在拦截器  使用完成后一定要清理线程  否则容易内存溢出(ThreadLocal的相关注意事项)
    }

    @Override//完成页面渲染 方法之后会先进入到此方法
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}
